package io;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * 文件输入流-FileInputStream
 */
public class FileInputStream_ {


    public static void main(String[] args) {

        /*
        InputStream
        1)FileInputStream:文件输入流
        2)BufferedInputStream:缓冲字节输入流
        3)ObjectInputStream:对象字节输入流

        使用FileInputStream读取 hello.txt文件 并将文件内容显示到控制台
        */
    }

    @Test
    public void readFile01() {
        String path = "D:\\IdeaCode\\javaStudy\\hello.txt";
        int readData = 0;
        FileInputStream fis = null;

        /*
            单个字节的读取，效率较低
            使用read()
         */
        try {
            //创建FileInputStream对象 用于读取文件
            fis = new FileInputStream(path);
            //从该输入流读取一个字节的数据。如果没有输入可用，此方法将阻止
            //因为是单个字节循环读取，所以当遇到汉字是会出现乱码，因为汉字是3字节构成
            while ((readData = fis.read()) != -1) {
                System.out.print((char) readData);//转成 char 显示
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    public void readFile02() {

        String path = "D:\\IdeaCode\\javaStudy\\hello.txt";
        byte[] buf = new byte[8];//一次读取8个字节
        int readLen = 0;
        FileInputStream fis = null;

        /*
            单个字节的读取，效率较低
            使用read()
         */
        try {
            //创建FileInputStream对象 用于读取文件
            fis = new FileInputStream(path);
            //从该输入流读取b.length字节的数据。如果没有输入可用，此方法将阻止
            //但是当读取文字内容时，依然有可能出现乱码
            while ((readLen = fis.read(buf)) != -1) {
                System.out.print(new String(buf, 0, readLen) );//转成 char 显示
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
